package com.dz.risk.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dz.risk.pojo.domain.ReportFormsEntity;
import com.dz.risk.pojo.model.ReportFormsTreeModel;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 报表目录
 *
 * @author baohan
 * @email
 * @date 2021-07-05 14:49:45
 */
@Mapper
public interface ReportFormsDao extends BaseMapper<ReportFormsEntity> {

    /**
     * @param reportFormsEntity
     * @return
     */
    String selectReportFormsId(ReportFormsEntity reportFormsEntity);

    /**
     * 根据参数查询报表树结构模型
     *
     * @param reportFormsName         报表名称
     * @param reportFormsSerialNumber 报表编号
     * @return 报表结构树模型集合
     */
    List<ReportFormsTreeModel> selectReportFormsTreeByParams(@Param("reportFormsName") String reportFormsName, @Param("reportFormsSerialNumber") String reportFormsSerialNumber);

    /**
     * 根据报表编号查询下级报表
     *
     * @param reportFormsSerialNumber 报表编号
     * @return 报表结构树模型集合
     */
    List<ReportFormsTreeModel> selectReportFormsTreeBySuperiorReportFormsSerialNumber(@Param("reportFormsSerialNumber") String reportFormsSerialNumber);

    /**
     * 查询所有报表基本信息(无版本得原始报表信息)
     *
     * @param reportFormsSerialNumber 报表编号
     * @param reportFormsName         报表名称
     * @return 报表基础信息集合
     */
    List<ReportFormsEntity> selectBasicInformationByParams(@Param("reportFormsSerialNumber") String reportFormsSerialNumber, @Param("reportFormsName") String reportFormsName);

    /**
     * 根据报表编号查询有效的该表编号报表版本数据信息
     *
     * @param reportFormsSerialNumber 报表编号
     * @return 报表基本信息集合
     */
    List<ReportFormsEntity> selectValidVersionDataByReportFormsSerialNumber(@Param("reportFormsSerialNumber") String reportFormsSerialNumber);

    /**
     * 根据报表类型查询顶级报表信息
     *
     * @return
     */
    List<ReportFormsTreeModel> selectTopReport();

    /**
     * 查询所有报表基本信息(已导入版本得报表数据)
     *
     * @param reportFormsSerialNumber 报表编号
     * @param reportFormsName         报表名称
     * @param reportFormsBeginDate    报表开始时间
     * @param reportFormsEndDate      报表结束时间
     * @return 报表基础信息集合
     */
    List<ReportFormsEntity> selectVersionReportFormsByParams(@Param("reportFormsSerialNumber") String reportFormsSerialNumber, @Param("reportFormsName") String reportFormsName, @Param("reportFormsBeginDate") Date reportFormsBeginDate, @Param("reportFormsEndDate") Date reportFormsEndDate);

    void updateExt(ReportFormsEntity reportFormsEntity);


    /**
     * 根据单元格编号以及版本区间获取该区间版本的该单元格所属的报表基本信息
     *
     * @param cellSerialNumber 单元格编号
     * @param versionBeginDate 版本开始时间
     * @param versionEndDate   版本结束时间
     * @return 报表基本信息
     */
    List<ReportFormsEntity> selectByCellSerialNumberAndBeginDateAndEndDate(@Param("cellSerialNumber") String cellSerialNumber,@Param("versionBeginDate") Date versionBeginDate,@Param("versionEndDate") Date versionEndDate);

    List<ReportFormsEntity> selectByNameOrNumber(ReportFormsEntity reportFormsEntity);
}
